/* -*-jde-*- */
package app.alumnoe.cv.beans;

import app.conexion.Conexion;
import app.conexion.ConexionException;
import app.util.SQLInjectionException;
import app.util.Validator;
import app.util.appException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Conocimientos técnico profesionales para el CV
 *
 * @author Victor Miguel Peralta Santa Anna
 * @since Diciembre 2011
 * @version 0.1
 */
public class TecnicoProfesional {

    /**
     * El identificador de las habilidades técnico profesionales.
     */
    private int nIdTecnicoProfesionales;
    /**
     * El identificador de CV
     */
    private int nIdCV;
    /**
     * El nombre del Conocimiento/Técnica/Habilidad
     */
    private String sNombreConocimiento;
    /**
     * Nivel sobre el conocimiento mencionado
     */
    private String sNivel;
    /**
     * Años de experiencia sobre el conocimiento
     */
    private String sAniosExperiencia;
    /**
     * Comentarios extras
     */
    private String sComentarios;

    /**
     * El contructor para objetos de habilidades tecnicas y profesionales
     *
     * @param nIdTecnicoProfesionales El identificador de las habilidades
     * tecnico profesionales
     * @param nIdCV el identificador del CV
     * @param sNombreConocimiento El nombre del conocimiento
     * @param sNivel El nivel que se tiene del conocimiento
     * @param sAniosExperiencia los años de experiencia sobre el conocimiento
     * @param sComentarios los comentarios sobre el mismo
     */
    public TecnicoProfesional(int nIdTecnicoProfesionales, int nIdCV, String sNombreConocimiento, String sNivel, String sAniosExperiencia, String sComentarios) {
        this.nIdTecnicoProfesionales = nIdTecnicoProfesionales;
        this.nIdCV = nIdCV;
        this.sNombreConocimiento = sNombreConocimiento;
        this.sNivel = sNivel;
        this.sAniosExperiencia = sAniosExperiencia;
        this.sComentarios = sComentarios;
    }

    @Override
    public String toString() {
        return "TecnicoProfesionales{" + "nIdTecnicoProfesionales=" + getnIdTecnicoProfesionales() + ", nIdCV=" + getnIdCV() + ", sNombreConocimiento=" + getsNombreConocimiento() + ", sNivel=" + getsNivel() + ", sAniosExperiencia=" + getsAniosExperiencia() + ", sComentarios=" + getsComentarios() + '}';
    }

    /**
     * @return the nIdTecnicoProfesionales
     */
    public int getnIdTecnicoProfesionales() {
        return nIdTecnicoProfesionales;
    }

    /**
     * @return the nIdCV
     */
    public int getnIdCV() {
        return nIdCV;
    }

    /**
     * @return the sNombreConocimiento
     */
    public String getsNombreConocimiento() {
        return sNombreConocimiento;
    }

    /**
     * @param sNombreConocimiento the sNombreConocimiento to set
     */
    public void setsNombreConocimiento(String sNombreConocimiento) {
        this.sNombreConocimiento = sNombreConocimiento;
    }

    /**
     * @return the sNivel
     */
    public String getsNivel() {
        return sNivel;
    }

    /**
     * @param sNivel the sNivel to set
     */
    public void setsNivel(String sNivel) {
        this.sNivel = sNivel;
    }

    /**
     * @return the sAniosExperiencia
     */
    public String getsAniosExperiencia() {
        return sAniosExperiencia;
    }

    /**
     * @param sAniosExperiencia the sAniosExperiencia to set
     */
    public void setsAniosExperiencia(String sAniosExperiencia) {
        this.sAniosExperiencia = sAniosExperiencia;
    }

    /**
     * @return the sComentarios
     */
    public String getsComentarios() {
        return sComentarios;
    }

    /**
     * @param sComentarios the sComentarios to set
     */
    public void setsComentarios(String sComentarios) {
        this.sComentarios = sComentarios;
    }

    /**
     * Guarda el objeto en la base de datos independientemente si éste es nuevo
     * o no.
     */
    public void save() throws appException {

        try {

            Conexion con = new Conexion();
            String query = "select ";
            if (nIdTecnicoProfesionales == -1) {
                query += "addCVTecnicosProfesionales(" + nIdCV;
                query += ", '" + sNombreConocimiento + "'";
                query += ", '" + sNivel + "'";
                query += ", '" + sAniosExperiencia + "'";
                query += ", '" + sComentarios + "'";
                query += ");";

                if (!Validator.checkSQLInjection(query)) {
                    ResultSet r = con.exec(query);
                    while (r.next()) {
                        int resultado = r.getInt("addCVTecnicosProfesionales");
                        this.nIdTecnicoProfesionales = resultado;
                    }
                }

            } else {

                query += "updateTecnicoProfesionales(" + nIdTecnicoProfesionales;
                query += ", '" + sNombreConocimiento + "'";
                query += ", '" + sNivel + "'";
                query += ", '" + sAniosExperiencia + "'";
                query += ", '" + sComentarios + "'";
                query += ");";

                if (!Validator.checkSQLInjection(query)) {
                    con.exec(query);
                }
            }

            con.close();
        } catch (SQLException ex) {
            System.err.println(ex);
            Logger.getLogger(Formacion.class.getName()).log(Level.SEVERE, null, ex);
            throw new appException("No se pudo guardar el elemento: Tecnico Profesional");
        } catch (ConexionException ce) {
            System.err.println(ce);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ce);
            throw new appException("No se pudo guardar el elemento: Tecnico Profesional");
        } catch (SQLInjectionException sqlie) {
            System.err.println(sqlie);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, sqlie);
            throw new appException(sqlie.getMessage());
        }

    }

    /**
     * Borra el objeto de la base de datos.
     */
    public void delete() throws appException {
        try {
            Conexion con = new Conexion();
            String query = "select deleteTecnicoProfesionales( " + nIdTecnicoProfesionales + " );";
            con.exec(query);
            con.close();
        } catch (ConexionException ce) {
            System.err.println(ce);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ce);
            throw new appException("No se pudo borrar el elemento: Tecnico Profesional");
        }
    }

    /**
     * Conexiones de prueba a la base de datos
     *
     * @param args
     * @throws ConexionException
     * @throws SQLException
     * @throws appException
     */
    public static void main(String args[]) throws ConexionException, SQLException, appException {


        //nuevo
        TecnicoProfesional f = new TecnicoProfesional(-1, 1, "nombre conocimiento", "nivel", "años de experiencia", "comentarios");
        f.save();

        //f.delete();


        System.out.println(f);
    }
}
